#include "gsm.h"
#include <net_api.h>
#include <stdlib.h>
#include "main.h"
#include "stm32f1xx_hal.h"
#include "string.h"
#include "uart.h"

eGsmInfo gsm_info;

const sNet gsm_netapi = {
    //	Gsm_Connect_Server,
    //	Gsm_DisConnect,
    //	Gsm_SendData,
    //	Gsm_GetIPD,
    //	Gsm_ClearRecive
    NULL, NULL, NULL, NULL, NULL};

void gsm_on(void) {
  HAL_GPIO_WritePin(GSM_PWR_GPIO_Port, GSM_PWR_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GSM_INT_GPIO_Port, GSM_INT_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GSM_RST_GPIO_Port, GSM_RST_Pin, GPIO_PIN_RESET);
}

void gsm_off(void) {
  HAL_GPIO_WritePin(GSM_PWR_GPIO_Port, GSM_PWR_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(GSM_INT_GPIO_Port, GSM_INT_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GSM_RST_GPIO_Port, GSM_RST_Pin, GPIO_PIN_RESET);
}

void gsm_rsthign(void) {
  HAL_GPIO_WritePin(GSM_RST_GPIO_Port, GSM_RST_Pin, GPIO_PIN_SET);
}

void gsm_rstlow(void) {
  HAL_GPIO_WritePin(GSM_RST_GPIO_Port, GSM_RST_Pin, GPIO_PIN_RESET);
}

uint8_t Gsm_WaitRecive(void) {
  uint16_t len = uart_getlen();
  if (len > 0) {
    Net_IO.dataLen = len;
  } else {
    Net_IO.dataLenPre = 0;
    Net_IO.dataLen = 0;
    return GSM_REV_WAIT;
  }
  if ((Net_IO.dataLen == Net_IO.dataLenPre) && (Net_IO.dataLen > 0)) {
    uart_receive(&Net_IO.buf[0], Net_IO.dataLen);
    Net_IO.dataLen = 0;  //清0接收计数
    return GSM_REV_OK;   //返回接收完成标志
  }
  Net_IO.dataLenPre = Net_IO.dataLen;  //置为相同
  return GSM_REV_WAIT;                 //返回接收未完成标志
}

void Gsm_ClearRecive(void) {
  Net_IO.dataLen = 0;
  Net_IO.dataLenPre = 0;
  memset(Net_IO.buf, 0, sizeof(Net_IO.buf));
}

void Gsm_Check(void) {
  Gsm_ClearRecive();
  uart_send((uint8_t *)GSM_CHECK, strlen(GSM_CHECK));
}

void Gsm_ATE(uint8_t status) {
  if (status == 0) {
    uart_send((uint8_t *)"ATE0\r\n", strlen("ATE0\r\n"));  //关闭回显
  } else {
    uart_send((uint8_t *)"ATE1\r\n", strlen("ATE1\r\n"));  //打开回显
  }
}

void Gsm_CIPTMODE_On(void) {
  uart_send((uint8_t *)"AT+CIPTMODE=1\r\n", strlen("AT+CIPTMODE=1\r\n"));
}

void Gsm_CIPTMODE_Off(void) { uart_send((uint8_t *)"+++", strlen("+++")); }
